package com.monise.view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

import com.monise.model.Funcionario;
import javax.swing.JSeparator;

public class FrameSistema extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	@SuppressWarnings("unused")
	private JPanel painelAux;
	
	private static JMenu mnNewMenu = new JMenu("Cadastro");
	private static JMenuItem menuCliente = new JMenuItem("Cliente");
	private static JMenuItem menuConsulta = new JMenuItem("Consulta");
	private static JMenuItem menuServico = new JMenuItem("Servi\u00E7o");
	private static JMenu mnNewMenu_1 = new JMenu("Consultas");
	private static JMenuItem mntmFluxoDeCaixa = new JMenuItem("Fluxo de Caixa");
	private static JMenuItem menuHistorico = new JMenuItem("Hist\u00F3rico Animal");	
	private static JMenuItem menuConsultaCliente = new JMenuItem("Cliente");
	private static JMenuItem menuConsultaServico = new JMenuItem("Servi\u00E7o");
	private static JMenuItem menuConsultasFuturas = new JMenuItem("Consultas futuras");
	private static JMenu mnCaixa = new JMenu("Caixa");
	private static JMenuItem mntmAbertura = new JMenuItem("Abertura");
	private static JMenuItem mntmMovimentao = new JMenuItem("Movimenta\u00E7\u00E3o");
	private static JMenuItem mntmFechamento = new JMenuItem("Fechamento");
	private static JMenuItem mntmTipoDeMovimentao = new JMenuItem("Tipo de A\u00E7\u00E3o");
	private static JMenu mnApontamento = new JMenu("Apontamento");
	private static JMenuItem mntmApontarHoras = new JMenuItem("Apontar Horas");
	private static JMenuItem mntmControleHoras = new JMenuItem("Controle Horas");
	
	private static FrameSistema frame;
    JDesktopPane plPrincipal;
    
    private static Funcionario funcionario; 
    private JMenuItem mntmFuncirio;
    private static JMenuItem mntmFuncionrio;
    private JMenu mnSair;
    private JMenuItem mntmLogoof;
    private JMenuItem mntmFecharSistema;
    private static JMenuItem mntmAnimal;
    
    public static Funcionario getFuncionario() {
		return funcionario;
	}

	public static void setFuncionario(Funcionario funcionario) {
		FrameSistema.funcionario = funcionario;
	}

	public static void main(String[] args) {

		for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
				.getInstalledLookAndFeels()) {
			if ("Nimbus".equals(info.getName())) {
				try {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
				} catch (ClassNotFoundException ex) {
					Logger.getLogger(FrameSistema.class.getName()).log(
							Level.FINE, null, ex);
				} catch (InstantiationException ex) {
					Logger.getLogger(FrameSistema.class.getName()).log(
							Level.FINE, null, ex);
				} catch (IllegalAccessException ex) {
					Logger.getLogger(FrameSistema.class.getName()).log(
							Level.FINE, null, ex);
				} catch (UnsupportedLookAndFeelException ex) {
					Logger.getLogger(FrameSistema.class.getName()).log(
							Level.FINE, null, ex);
				}
				break;
			}
		}

		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					getInstancia();
					frame.setVisible(true);

					FrameLogin login = new FrameLogin();
					FrameSistema.getInstancia().AbrirTela(login);
					login.setVisible(true);	

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public FrameSistema() {

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 1374, 723);
		this.setLocationRelativeTo(null);
		// this.setExtendedState(JFrame.MAXIMIZED_BOTH);

		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);

		mnNewMenu = new JMenu("Cadastro");
		menuBar.add(mnNewMenu);

		menuCliente = new JMenuItem("Cliente");
		menuCliente.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/cliente.png")));
		menuCliente.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				FrameCadastroClienteAnimal tela = new FrameCadastroClienteAnimal();
				AbrirTela(tela);
			}
		});
		mnNewMenu.add(menuCliente);

		menuConsulta = new JMenuItem("Consulta");
		menuConsulta.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/consulta.png")));
		mnNewMenu.add(menuConsulta);
		menuConsulta.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameConsulta tela = new FrameConsulta();
				AbrirTela(tela);
			}
		});

		menuServico = new JMenuItem("Servi\u00E7o");
		menuServico.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/servico.png")));
		mnNewMenu.add(menuServico);
		menuServico.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameServico tela = new FrameServico();
				AbrirTela(tela);
			}
		});
		
		mntmFuncirio = new JMenuItem("Funcion\u00E1rio");
		mntmFuncirio.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/padraoFeminino.png")));
		mnNewMenu.add(mntmFuncirio);
		mntmFuncirio.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameCadastroFuncionario tela = new FrameCadastroFuncionario();
				AbrirTela(tela);
			}
		});

		mnNewMenu_1 = new JMenu("Consultas");
		menuBar.add(mnNewMenu_1);

		mntmFluxoDeCaixa = new JMenuItem("Fluxo de Caixa");
		mntmFluxoDeCaixa.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/fluxo.png")));
		mntmFluxoDeCaixa.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameConsultaSaldo tela = new FrameConsultaSaldo();
				AbrirTela(tela);
			}
		});
		mnNewMenu_1.add(mntmFluxoDeCaixa);

		menuHistorico = new JMenuItem("Hist\u00F3rico Animal");
		menuHistorico.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/animal_icone.jpg")));
		menuHistorico.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				FrameConsultaHistorico tela = new FrameConsultaHistorico();
				AbrirTela(tela);
			}
		});
		mnNewMenu_1.add(menuHistorico);
		
				menuConsultasFuturas = new JMenuItem("Consultas futuras");
				menuConsultasFuturas.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/consulta.png")));
				menuConsultasFuturas.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent arg0) {
						FrameConsultasFuturas tela = new FrameConsultasFuturas();
						AbrirTela(tela);
					}
				});
				mnNewMenu_1.add(menuConsultasFuturas);
		
		JSeparator separator = new JSeparator();
		mnNewMenu_1.add(separator);

		menuConsultaCliente = new JMenuItem("Cliente");
		menuConsultaCliente.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/cliente.png")));
		mnNewMenu_1.add(menuConsultaCliente);
		menuConsultaCliente.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameEditarCadastroCliente tela = new FrameEditarCadastroCliente();
				AbrirTela(tela);
			}
		});

		menuConsultaServico = new JMenuItem("Servi\u00E7o");
		menuConsultaServico.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/servico.png")));
		menuConsultaServico.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameEditarServico tela = new FrameEditarServico();
				AbrirTela(tela);
			}
		});
		
		mntmAnimal = new JMenuItem("Animal");
		mntmAnimal.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/animal_icone.jpg")));
		mnNewMenu_1.add(mntmAnimal);
		mntmAnimal.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameEditarCadastroAnimal tela = new FrameEditarCadastroAnimal();
				AbrirTela(tela);
			}
		});
		
		mntmFuncionrio = new JMenuItem("Funcion\u00E1rio");
		mntmFuncionrio.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/padraoFeminino.png")));
		mnNewMenu_1.add(mntmFuncionrio);
		mntmFuncionrio.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameEditarFuncionario tela = new FrameEditarFuncionario();
				AbrirTela(tela);
			}
		});

		mnNewMenu_1.add(menuConsultaServico);

		mnCaixa = new JMenu("Caixa");
		menuBar.add(mnCaixa);

		mntmAbertura = new JMenuItem("Abertura");
		mntmAbertura.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/abertura.png")));
		mntmAbertura.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				FrameAbertura tela = new FrameAbertura();
				AbrirTela(tela);
			}
		});
		mnCaixa.add(mntmAbertura);

		mntmMovimentao = new JMenuItem("Movimenta\u00E7\u00E3o");
		mntmMovimentao.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/movimentacao.png")));
		mntmMovimentao.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameMovimentacao tela = new FrameMovimentacao();
				AbrirTela(tela);
			}
		});

		mntmFechamento = new JMenuItem("Fechamento");
		mntmFechamento.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/fechamento.png")));
		mntmFechamento.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameFechamento tela = new FrameFechamento();
				AbrirTela(tela);
			}
		});
		mnCaixa.add(mntmFechamento);
		
		JSeparator separator_1 = new JSeparator();
		mnCaixa.add(separator_1);
		mnCaixa.add(mntmMovimentao);

		mntmTipoDeMovimentao = new JMenuItem("Tipo de A\u00E7\u00E3o");
		mntmTipoDeMovimentao.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/tipo.png")));
		mntmTipoDeMovimentao.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameTipoMovimentacao tela = new FrameTipoMovimentacao();
				AbrirTela(tela);
			}
		});
		mnCaixa.add(mntmTipoDeMovimentao);

		mnApontamento = new JMenu("Apontamento");
		menuBar.add(mnApontamento);

		mntmApontarHoras = new JMenuItem("Apontar Horas");
		mntmApontarHoras.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/relogio_usado.png")));
		mnApontamento.add(mntmApontarHoras);
		mntmApontarHoras.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameApontarHoras tela = new FrameApontarHoras(funcionario);
				AbrirTela(tela);
			}
		});

		mntmControleHoras = new JMenuItem("Controle Horas");
		mntmControleHoras.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/hora_trabalhada.png")));
		mnApontamento.add(mntmControleHoras);
		mntmControleHoras.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FrameControleHoras tela = new FrameControleHoras();
				AbrirTela(tela);
			}
		});
		
		mnSair = new JMenu("Sair");
		menuBar.add(mnSair);
		
		mntmLogoof = new JMenuItem("Trocar usu\u00E1rio");
		mntmLogoof.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/padraoFeminino.png")));
		mnSair.add(mntmLogoof);
		mntmLogoof.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				funcionario = null;
				bloquearMenu();
				FrameLogin tela = new FrameLogin();
				AbrirTela(tela);
			}
		});
		
		mntmFecharSistema = new JMenuItem("Fechar sistema");
		mntmFecharSistema.setIcon(new ImageIcon(FrameSistema.class.getResource("/com/monise/imagens/Close.png")));
		mnSair.add(mntmFecharSistema);
		mntmFecharSistema.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				   System.exit(0); 
			}
		});

		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new BorderLayout(0, 0));

		plPrincipal = new JDesktopPane();
		plPrincipal.setBackground(new Color(102, 255, 153));
		contentPane.add(plPrincipal, BorderLayout.CENTER);

		JLabel lblNewLabel = new JLabel("");
		lblNewLabel.setIcon(new ImageIcon(FrameSistema.class
				.getResource("/com/monise/imagens/LATEMIA3.png")));
		GroupLayout gl_plPrincipal = new GroupLayout(plPrincipal);
		gl_plPrincipal.setHorizontalGroup(gl_plPrincipal.createParallelGroup(
				Alignment.LEADING).addGroup(
				Alignment.TRAILING,
				gl_plPrincipal.createSequentialGroup()
						.addContainerGap(227, Short.MAX_VALUE)
						.addComponent(lblNewLabel).addGap(212)));
		gl_plPrincipal.setVerticalGroup(gl_plPrincipal.createParallelGroup(
				Alignment.LEADING).addGroup(
				Alignment.TRAILING,
				gl_plPrincipal
						.createSequentialGroup()
						.addContainerGap(282, Short.MAX_VALUE)
						.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE,
								106, GroupLayout.PREFERRED_SIZE).addGap(266)));
		plPrincipal.setLayout(gl_plPrincipal);
		
		bloquearMenu();
	}

	public static FrameSistema getInstancia() {
		if (frame == null) {
			frame = new FrameSistema();
		}
		return frame;
	}

	public static JDesktopPane getPanelPrincipal() {
		return getInstancia().plPrincipal;
	}

	private void AbrirTela(JInternalFrame tela) {
		getInstancia().plPrincipal.add(tela);
		int lDesk = plPrincipal.getWidth();
		int aDesk = plPrincipal.getHeight();
		int lIFrame = tela.getWidth();
		int aIFrame = tela.getHeight();

		tela.setLocation(lDesk / 2 - lIFrame / 2, aDesk / 2 - aIFrame / 2);
		tela.setVisible(true);
	}
	
	public static void permissao(){

		if(funcionario.getAdministrador() == 1){
			mnNewMenu.setEnabled(true);
			menuCliente.setEnabled(true);
			menuConsulta.setEnabled(true);
			menuServico.setEnabled(true);
			mnNewMenu_1.setEnabled(true);
            mntmFluxoDeCaixa.setEnabled(true);
			menuHistorico.setEnabled(true);	
			menuConsultaCliente.setEnabled(true);
			menuConsultaServico.setEnabled(true);
			menuConsultasFuturas.setEnabled(true);
			mnCaixa.setEnabled(true);
			mntmAbertura.setEnabled(true);
			mntmMovimentao.setEnabled(true);
			mntmFechamento.setEnabled(true);
			mntmTipoDeMovimentao.setEnabled(true);
			mnApontamento.setEnabled(true);
			mntmApontarHoras.setEnabled(true);
			mntmControleHoras.setEnabled(true);
			mntmFuncionrio.setEnabled(true);
			mntmAnimal.setEnabled(true);
		}
		else{
			mnNewMenu.setEnabled(false);
			menuCliente.setEnabled(false);
			menuConsulta.setEnabled(false);
			menuServico.setEnabled(false);
			mnNewMenu_1.setEnabled(false);
            mntmFluxoDeCaixa.setEnabled(false);
			menuHistorico.setEnabled(true);	
			menuConsultaCliente.setEnabled(true);
			menuConsultaServico.setEnabled(true);
			menuConsultasFuturas.setEnabled(true);
			mnCaixa.setEnabled(true);
			mntmAbertura.setEnabled(true);
			mntmMovimentao.setEnabled(true);
			mntmFechamento.setEnabled(true);
			mntmTipoDeMovimentao.setEnabled(true);
			mnApontamento.setEnabled(true);
			mntmApontarHoras.setEnabled(true);
			mntmControleHoras.setEnabled(true);
			mntmFuncionrio.setEnabled(false);
			mntmAnimal.setEnabled(false);
		}
	}
	
	private void bloquearMenu(){
		mnNewMenu.setEnabled(false);
		menuCliente.setEnabled(false);
		menuConsulta.setEnabled(false);
		menuServico.setEnabled(false);
		mnNewMenu_1.setEnabled(false);
        mntmFluxoDeCaixa.setEnabled(false);
		menuHistorico.setEnabled(false);	
		menuConsultaCliente.setEnabled(false);
		menuConsultaServico.setEnabled(false);
		menuConsultasFuturas.setEnabled(false);
		mnCaixa.setEnabled(false);
		mntmAbertura.setEnabled(false);
		mntmMovimentao.setEnabled(false);
		mntmFechamento.setEnabled(false);
		mntmTipoDeMovimentao.setEnabled(false);
		mnApontamento.setEnabled(false);
		mntmApontarHoras.setEnabled(false);
		mntmControleHoras.setEnabled(false);
		mntmFuncionrio.setEnabled(false);
		mntmAnimal.setEnabled(false);
	}
}
